#ifndef BINARYTREE_H
#define BINARYTREE_H

#include <QString>

typedef struct BinaryTreeNode {
    char val;
    struct BinaryTreeNode *lchild, *rchild;
} BinaryTreeNode, *BinaryTree;

// @ 通过前(后)序遍历和中序遍历创建二叉树
// @ other : QString : 前(后)序遍历
// @ mid : QString : 中序遍历
// @ isPrev : bool : 判定是否为前序遍历,若为true则为前序遍历,否则为后序遍历
// @ return : BinaryTree : 返回新创建的二叉树的根节点
BinaryTree BuildBinaryTreeByTraversal(QString other, QString mid, bool isPrev);

// @ 通过括号序列创建二叉树
// @ str : QString : 括号序列
// @ return : BinaryTree : 返回新创建的二叉树的根节点
BinaryTree BuildBinaryTreeByParentheses(QString str);

// @ 销毁树
// @ tree : BinaryTree : 要销毁的树
void DestoryTree(BinaryTree tree);

// @ 获得二叉树的深度
// @ tree : BinaryTree : 二叉树
// @ return : int : 二叉树的深度
int GetTreeHeight(BinaryTree tree);

#endif // BINARYTREE_H
